package org.smart4j.framework.core;

import org.smart4j.framework.common.helper.*;
import org.smart4j.framework.common.util.ClassUtil;

/**
 * 入口加载类（让加载更集中）
 * 1.加载ClassHelper（加载项目基础包路径下的字节码文件）
 * 2.加载BeanHelper（加载Bean以及初始化Bean容器）
 * 3.加载IOCHelper（控制反转/依赖注入）
 * 4.加载ControllerHelper（初始化请求与处理类的关系映射）
 *
 * @author YooLin1c
 * @version 1.0.0
 * @since 2018-01-30 20:16
 */
public class SmartLoader {
    /**
     * 项目加载的入口方法
     */
    public static void init() {
        Class<?>[] loadClassList = {
                //获取并保存项目下所有Class对象信息
                ClassHelper.class,
                //获取所有申明为Bean（beanClassSet）的对象间的映射关系并存储至Bean容器（BEAN_MAP）中
                BeanHelper.class,
                //注意：AOP需在IOC前加载，因为首先需要通过AOPHelper获取代理对象，然后通过IOCHelper进行依赖注入
                AOPHelper.class,
                //扫描包，进行依赖注入DI
                IOCHelper.class,
                //请求分发
                ControllerHelper.class
        };
        for (Class<?> clazz : loadClassList) {
            ClassUtil.loadClass(clazz.getName(), true);
        }
    }
}
